﻿
using System;
using System.IO.IsolatedStorage;

namespace Mandarine.MVVM.ViewModel
{
    /// <summary>
    ///  設定画面のためにIsolatedStorageSettingsを使ってプロパティを
    ///  保存する機能を持たせたビューモデルクラス
    ///  <pre>単体テストを容易にするためにも、ViewModelクラスにViewへの依存性を
    ///  持たせないでください。</pre>
    /// </summary>
	public class AppSettingsViewModel : ViewModel
	{
        protected IsolatedStorageSettings _isolatedStore    ;
   	
        /// <summary>
        /// コンストラクタ
        /// </summary>
        public AppSettingsViewModel() : base()
        {
            _isolatedStore = IsolatedStorageSettings.ApplicationSettings;     
        }
        /// <summary>
        /// 値を追加又は更新します
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool AddOrUpdateValue(string key, Object value)
        {
            bool valueChanged = false;

            if (_isolatedStore.Contains(key))
            {
                if (_isolatedStore[key] != value)
                {
                    _isolatedStore[key] = value;
                    valueChanged = true;
                }
            }
            else
            {
                _isolatedStore.Add(key, value);
                valueChanged = true;
            }
            return valueChanged;
        }
        /// <summary>
        /// 値を取得します
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public T GetValueOrDefault<T>(string key, T defaultValue)
        {
            T value;
            if (_isolatedStore.Contains(key))
            {
                value = (T)_isolatedStore[key];
            }
            else
            {
                value = defaultValue;
            }
            return value;
        }
        /// <summary>
        /// データを保存します
        /// </summary>
        public void Save()
        {
            _isolatedStore.Save();
        }
    }
}
